﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace WindowsGame1
{
    /// <summary>
    /// 
    /// </summary>
    public class GerenciadorTiro
    {
        /// <summary>
        /// Lista de tiros
        /// </summary>
        public static List<Tiro> lista = new List<Tiro>();

        /// <summary>
        /// 
        /// </summary>
        public static SpriteFont fonte;

        /// <summary>
        /// Textura dos tiros, static porque é apenas uma texturas para todos os tiros
        /// </summary>
        static Texture2D textura;

        /// <summary>
        /// variavel que representa a tela de jogo
        /// </summary>
        static GameWindow gw;

        /// <summary>
        /// 
        /// </summary>
        static int quantidadeMax = 20;

        SoundEffect soundTiro;


        /// <summary>
        /// Content para carregamento de texturas, sons e videos
        /// Textura que irá ser carregada para representar o tiro
        /// gw variavel que carregara a tela
        /// </summary>
        /// <param name="Content"></param>
        /// <param name="textura"></param>
        /// <param name="gw"></param>
        public GerenciadorTiro(ContentManager Content, Texture2D textura, GameWindow gw)
        {
            GerenciadorTiro.textura = textura;
            GerenciadorTiro.gw = gw;
            fonte = Content.Load<SpriteFont>("arial");
            soundTiro = Content.Load<SoundEffect>("Laser1");
        }


        public void Update(GameTime gameTime, Vector2 posicao_nave)
        {

            if ((Game1.ApertouJoystick(Buttons.A)) ||
                 (Game1.ApertouTeclado(Keys.A)))
            {
                GerenciadorTiro.lista.Add(new Tiro(GerenciadorTiro.textura, posicao_nave));
                soundTiro.Play();
            }

            for (int i = 0; i < GerenciadorTiro.lista.Count; i++)
            {
                GerenciadorTiro.lista[i].Update(gameTime);

                for (int j = 0; j < GerenciadorAsteroide.lista.Count; j++)
                {
                    if ((GerenciadorTiro.lista[i].RecColisao.Intersects(GerenciadorAsteroide.lista[j].recColisao))
                        && (GerenciadorTiro.lista[i].visivel)
                        && (GerenciadorAsteroide.lista[j].visivel)
                        )
                    {
                        GerenciadorTiro.lista[i].visivel = false;
                        GerenciadorAsteroide.lista[j].visivel = false;
                        HUD.pontuacao++;
                    }
                }

                if ((GerenciadorTiro.lista.Count > quantidadeMax) || (GerenciadorTiro.lista[i].RecColisao.Y < 0)
                    || GerenciadorTiro.lista[i].visivel == false)
                {
                    GerenciadorTiro.lista.RemoveAt(i);
                }

                if ((Game1.ApertouJoystick(Buttons.RightShoulder)) ||
             (Game1.ApertouTeclado(Keys.T)))
                {
                  
                        lista[i].trocaTiro = !lista[i].trocaTiro;
                }
            }
        }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {

            foreach (Tiro tiro in lista)
            {
                tiro.Draw(gameTime, spriteBatch);
            }

        }
    }
}
